package banco;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;


import basicas.Livro;

import dao.DAO;
import dao.DAOException;

public class AcoesBancoLivro extends DAO {
	public void inserir(Livro livro) {
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            con = getConnection(true);
            pstmt = con.prepareStatement("INSERT INTO livro (nome, autor, genero, quantidade) VALUES (?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
            pstmt.setString(1, livro.getNome());
            pstmt.setString(2, livro.getAutor());
            pstmt.setString(3, livro.getGenero());
            pstmt.setInt(4, livro.getQuantidade());
            
            pstmt.executeUpdate();
            rs = pstmt.getGeneratedKeys();
            if (rs.next()) {
            	livro.setId(rs.getInt(1));
            }


        } catch (SQLException ex) {
            throw new DAOException(ex);
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }

                if (pstmt != null) {
                    pstmt.close();
                }

                if (con != null) {
                    con.close();
                }
            } catch (SQLException ex) {
                throw new DAOException(ex);
            }
        }
	}
	
	public Collection<Livro> listarTodos() {
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Livro livro = null;
        List<Livro> livros = new ArrayList<Livro>();

        try {
            con = getConnection(true);
            pstmt = con.prepareStatement("SELECT id, nome, autor, genero, quantidade FROM livro ORDER BY nome desc");
            rs = pstmt.executeQuery();

            while (rs.next()) {
                livro = new Livro(rs.getString("nome"), rs.getString("autor"), rs.getString("genero"), rs.getInt("quantidade"));
                livro.setId(rs.getInt("id"));
                livros.add(livro);
            }

        } catch (SQLException ex) {
            throw new DAOException(ex);
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }

                if (pstmt != null) {
                    pstmt.close();
                }

                if (con != null) {
                    con.close();
                }
            } catch (SQLException ex) {
                throw new DAOException(ex);
            }
        }
        return livros;
	}
	

}
